#ifndef AUTOCONTROL1028_H
#define AUTOCONTROL1028_H

#include "TableWidgetForm.h"

struct AutoItem
{
    int id;
    QString name;
    int val;
    QString desc;

    // 获取结构体成员名的字符串
    QString toFieldNames() const {
        return QString("name,val,desc");
    }

    // 获取结构体成员名的类型
    QStringList toFieldTypes() const {
        QStringList _list;
        _list << typeid(name).name();
        _list << typeid(val).name();
        _list << typeid(desc).name();
        return _list;
    }
};

struct AutoTemp
{
    int id;
    QString name;
    int val;
    int AirInletTempDevi;

    // 获取结构体成员名的字符串
    QString toFieldNames() const {
        return QString("name,val,AirInletTempDevi");
    }

    // 获取结构体成员名的类型
    QStringList toFieldTypes() const {
        QStringList _list;
        _list << typeid(name).name();
        _list << typeid(val).name();
        _list << typeid(AirInletTempDevi).name();
        return _list;
    }
};

struct AutoArea
{
    int id;
    QString name;
    QString in_sensor;
    QString out_sensor;
    int water_in_sensor;
    int water_out_sensor;

    // 获取结构体成员名的字符串
    QString toFieldNames() const {
        return QString("name,in_sensor,out_sensor,water_in_sensor,water_out_sensor");
    }

    // 获取结构体成员名的类型
    QStringList toFieldTypes() const {
        QStringList _list;
        _list << typeid(name).name();
        _list << typeid(in_sensor).name();
        _list << typeid(out_sensor).name();
        _list << typeid(water_in_sensor).name();
        _list << typeid(water_out_sensor).name();
        return _list;
    }
};

struct DevModeItem
{
    int id;
    QString name;
    int mode;

    // 获取结构体成员名的字符串
    QString toFieldNames() const {
        return QString("name,mode");
    }

    // 获取结构体成员名的类型
    QStringList toFieldTypes() const {
        QStringList _list;
        _list << typeid(name).name();
        _list << typeid(mode).name();
        return _list;
    }
};

struct AreasArea
{
    int id;
    QString name;
    int mode;
    int gear;

    // 获取结构体成员名的字符串
    QString toFieldNames() const {
        return QString("name,mode,gear");
    }

    // 获取结构体成员名的类型
    QStringList toFieldTypes() const {
        QStringList _list;
        _list << typeid(name).name();
        _list << typeid(mode).name();
        _list << typeid(gear).name();
        return _list;
    }
};

struct AreaGear
{
    int id;
    int rotate;
    int angle;

    // 获取结构体成员名的字符串
    QString toFieldNames() const {
        return QString("rotate,angle");
    }

    // 获取结构体成员名的类型
    QStringList toFieldTypes() const {
        QStringList _list;
        _list << typeid(rotate).name();
        _list << typeid(angle).name();
        return _list;
    }
};

class AutoControl1028
{
public:
    AutoControl1028();

    //初始化UI
    static void InitUI(const QString& fileName, QList<QPair<QWidget *, QString>>& widgets, QMap<int, QList<TableWidgetForm*>>& m_pTableWidgetFormMap);

    //保存
    static bool SaveUI(const QString& fileName, const QMap<int, QList<TableWidgetForm*>>& m_pTableWidgetFormMap);

    //解析
    static void Analysis(const QString& path, QList<AutoItem>& _AutoItemList, QList<AutoTemp>& _AutoTempList, QList<AutoArea>& _AutoAreaList,
                         QList<DevModeItem>& _DevModeItem, QList<QPair<AreasArea, QList<AreaGear>>>& _AreasList);

    //保存
    static bool SaveXml(const QString& path, const QList<AutoItem>& _AutoItemList, const QList<AutoTemp>& _AutoTempList, const QList<AutoArea>& _AutoAreaList,
                        const QList<DevModeItem>& _DevModeItem, const QList<QPair<AreasArea, QList<AreaGear>>>& _AreasList);
};

#endif // AUTOCONTROL1028_H
